home *** CD-ROM | disk | FTP | other *** search
- 'This program demonstrates the use of the
- 'ZBasic 5.0 CALL statement when calling
- 'a (LS) PASCAL CODE resource.
-
- '©1989 MacTutor
- 'By Dave Kelly
-
- WINDOW OFF
- COORDINATE WINDOW
- DEF MOUSE=-1
- MOUSE ON
- BREAK ON
- DEFSTR LONG:T&=CVI("CODE")
- DEF LEN=255
- DIM B%(7)
- GOSUB "Define Help Cursor"
- APPLE MENU "About Call Help"
- MENU 1,0,1,"File"
- MENU 1,1,1,"Open…"
- MENU 1,2,1,"Close"
- MENU 1,3,0,"-"
- MENU 1,4,1,"Save"
- MENU 1,5,1,"Save As…"
- MENU 1,6,0,"-"
- MENU 1,7,1,"Page Setup…"
- MENU 1,8,1,"Print…"
- MENU 1,9,0,"-"
- MENU 1,10,1,"Quit"
- EDIT MENU 2
- Message%=0 'Set up string parameters
- HelpCursor%=0
-
- 'Find out screen size.
- CALL GETWMGRPORT(WMgrPort&)
- PortTop=PEEK WORD(WMgrPort&+8)
- PortLeft=PEEK WORD(WMgrPort&+10)
- PortBottom=PEEK WORD(WMgrPort&+12)
- PortRight=PEEK WORD(WMgrPort&+14)
-
- WINDOW 1,"Main Window",(10,44)-(PortRight-4,PortBottom-4),5
- GET WINDOW #1, WindowPtr&
-
- ON MENU GOSUB "Do MenuEvent"
- ON DIALOG GOSUB "Do DialogEvent"
- MENU ON:DIALOG ON:BREAK ON
- "Loop"
- CALL GETKEYS(B%(0))
- LONG IF B%(2)=16 AND B%(3)=-32767
- GOSUB "ChangeCursor"
- END IF
- GOTO "Loop"
-
- DIALOG OFF:MENU OFF
- "Do MenuEvent"
- Menunumber=MENU(0)
- Menuitem=MENU(1)
- MENU
- SELECT Menunumber
- CASE 255
- Message%=0
- GOSUB "Do Call"
- CASE 1
- GOSUB "Do File Menu"
- END SELECT
- HelpCursor%=1
- Message%=0
- GOSUB "ChangeCursor"
- RETURN
-
- "Do File Menu"
- LONG IF HelpCursor%=0
- SELECT Menuitem
- CASE 1 'Open
- CASE 2 'Close
- CASE 4 'Save
- CASE 5 'Save As…
- CASE 7 'Page Setup…
- DEF PAGE
- CASE 8 'Print…
- DEF LPRINT
- CASE 10 'Quit
- GOTO "Quit"
- END SELECT
- XELSE
- SELECT Menuitem
- CASE 1 'Open
- Message%=1
- GOSUB "Do Call"
- CASE 2 'Close
- Message%=2
- GOSUB "Do Call"
- CASE 4 'Save
- Message%=4
- GOSUB "Do Call"
- CASE 5 'Save As…
- Message%=5
- GOSUB "Do Call"
- CASE 7 'Page Setup…
- Message%=7
- GOSUB "Do Call"
- CASE 8 'Print…
- Message%=8
- GOSUB "Do Call"
- CASE 10 'Quit
- Message%=10
- GOSUB "Do Call"
- END SELECT
- END IF
- RETURN
-
- "Quit"
- END
-
- "Do DialogEvent"
- D=DIALOG(0):DI=DIALOG(D)
- SELECT D
- CASE 1 'Button
- CASE 2 'Edit Field
- CASE 3 'Inactive Window
- CASE 4 'Close Box
- GOTO "Quit"
- CASE 5 'Window Update
- CASE 6 'Return Key
- CASE 7 'Tab Key
- CASE 8 'Zoom-in
- CASE 9 'Zoom-out
- CASE 10 'Shift-Tab
- CASE 11 'Clear Key
- CASE 12 'Left-Arrow
- CASE 13 'Right-Arrow
- CASE 14 'Up-Arrow
- CASE 15 'Down-Arrow
- CASE 16 'Event inkey$
- IF DI=5 THEN GOSUB "Do Call"
- CASE 17 'Disk Insert
- END SELECT
- RETURN
-
- "Do Call"
- LONG IF Message%=0
- Id=500 'Help DA
- XELSE
- Id=501 'Context Sensitive Help
- END IF
- Result&=0:Y%=0
- SCode&= FN GETRESOURCE(T&,Id) 'load the call into memory
- IF SCode&=0 THEN PRINT "Opps":END 'End if there is no call to call
- Y%=FN HLOCK(SCode&) ' Lock a Relocatable Memory Block
- ActualCode&=PEEK LONG (SCode&)
- LONG IF Message%=0
- CALL ActualCode& 'Call the Help procedure
- XELSE
- CALL ActualCode&(Message%) 'Call the Context Sensitive Help function
- END IF
- CALL RELEASERESOURCE(SCode&)
- Y%=FN HUNLOCK(SCode&) 'Unlock a "Locked" Handle
- Y%=FN DISPOSHANDLE(SCode&) 'Dispose of Memory block pointed to by a Handle
- Message%=0 'Set up string parameters
- RETURN
-
- "Define Help Cursor"
- DIM A%(40)
- A%(0)=&H0000:A%(1)=&H3F80:A%(2)=&H7FC0:A%(3)=&H60C0
- A%(4)=&H60C0:A%(5)=&H00C0:A%(6)=&H01C0:A%(7)=&H0380
- A%(8)=&H0700:A%(9)=&H0E00:A%(10)=&H0C00:A%(11)=&H0C00
- A%(12)=&H0000:A%(13)=&H0C00:A%(14)=&H0C00:A%(15)=&H0000
- A%(16)=&H3F80:A%(17)=&H7FC0:A%(18)=&HFFE0:A%(19)=&HFFE0
- A%(20)=&HF1E0:A%(21)=&HF1E0:A%(22)=&H03E0:A%(23)=&H07C0
- A%(24)=&H0F80:A%(25)=&H1F00:A%(26)=&H1E00:A%(27)=&H1E00
- A%(28)=&H1E00:A%(29)=&H1E00:A%(30)=&H1E00:A%(31)=&H1E00
- A%(32)=&H0004:A%(33)=&H0002
- HelpCursor%=0
- RETURN
-
- "ChangeCursor"
- LONG IF HelpCursor%=0
- CALL SETCURSOR(A%(0))
- CALL SHOWCURSOR
- HelpCursor%=1
- XELSE
- CURSOR=0
- HelpCursor%=0
- END IF
- WHILE B%(2)=16 AND B%(3)=-32767
- CALL GETKEYS(B%(0))
- WEND
- RETURN
-
-
-
-